from matplotlib import pyplot as plt
import numpy as np

# 绘制曲线
x = np.linspace(2, 21, 20)  # 取闭区间[2, 21]之间的等差数列，列表长度20
y = np.log10(x) + 0.5
plt.figure()  # 添加一个窗口。如果只显示一个窗口，可以省略该句。
plt.plot(x, y)  # plot在一个figure窗口中添加一个图，绘制曲线，默认颜色

# 绘制离散点
plt.plot(x, y, '.y')  # 绘制黄色的点，为了和曲线颜色不一样
x0, y0 = 15, np.log10(15) + 0.5
plt.annotate('Interpolation point',
             xy=(x0, y0),
             xytext=(x0, y0 - 1),
             arrowprops=dict(arrowstyle='->'))  # 添加注释
for x0, y0 in zip(x, y):
    plt.quiver(x0, y0 - 0.3, 0, 1, color='g', width=0.005)  # 绘制箭头

x = range(2, 21, 5)
y = np.log10(x) + 0.5
plt.plot(x, y, 'om')  # 绘制紫红色的圆形的点
x0, y0 = 7, np.log10(7) + 0.5
plt.annotate('Original point',
             xy=(x0, y0),
             xytext=(x0, y0 - 1),
             arrowprops=dict(arrowstyle='->'))
for x0, y0 in zip(x, y):
    plt.quiver(x0, y0 + 0.3, 0, -1, color='g', width=0.005)  # 绘制箭头

# 设置坐标范围
plt.xlim(2, 21)  # 设置x轴范围
plt.xticks(range(0, 23, 2))  # 设置X轴坐标点的值，为[0， 22]之间的以2为差值的等差数组
plt.ylim(0, 3)  # 设置y轴范围

# 显示图形
plt.show()  # 显示绘制出的图